package com.dwfyc.managedBean;

import java.util.ArrayList;
import java.util.List;

import javax.faces.context.FacesContext;
import javax.faces.el.MethodBinding;
import javax.faces.event.AbortProcessingException;
import javax.faces.event.ActionEvent;
import javax.faces.event.ActionListener;

import org.apache.log4j.Logger;
import org.apache.taglibs.standard.tag.common.core.SetSupport;


import com.dwfyc.fachada.IGestionRol;
import com.dwfyc.fachada.IGestionRolSubtarea;
import com.dwfyc.hibernate.Proveedor;
import com.dwfyc.hibernate.Rolsubtarea;
import com.dwfyc.hibernate.Tarea;
import com.dwfyc.utils.Accesos_Contextos;
import com.icesoft.faces.component.menubar.MenuItem;
import com.icesoft.faces.webapp.command.Redirect;

public class MenuBean  implements ActionListener{
	private Logger log = Logger.getLogger(this.getClass());

	private IGestionRol gr;
	private IGestionRolSubtarea grs;
	private List<MenuItem> opcionesMenu= new ArrayList<MenuItem>();
	private String rutaImagenes = "./imagenes/";
	private String claseBoton ="botonesMenu";
	private String enlace ="";
	

	public MenuBean() {
	}

	public void crearMenu() {
		Proveedor p = (Proveedor) Accesos_Contextos.getSesion().getAttribute(
				"Proveedor");

		List<Rolsubtarea> rsList = grs.getSubtareasFromRol(p.getRol());
		MenuItem menuTarea , menuSubtarea;
		
		Tarea tAnt;
		//Inicializamos la primera tarea
		menuTarea = new MenuItem();
		tAnt = rsList.get(0).getSubtarea().getTarea();
		menuTarea.setValue(tAnt.getNombre());
		menuTarea.setIcon(rutaImagenes.concat(tAnt.getImagen()));
		menuTarea.setStyleClass(claseBoton);	
		
		
		/*
		 * Lo que hace es recorrer rolSubtarea, de tal forma que guarda una tarea,
		 * y va recorriendo todas las subtareas, y cuando ve que cambia la tarea
		 * entonces creamos otro menuItem.
		 */
		for (Rolsubtarea rs : rsList) {			
			if(rs.getSubtarea().getTarea().getIdtarea() == tAnt.getIdtarea()){
				menuSubtarea = new MenuItem();				
			}else{
				//Introducimos el menuTarea que hemos configurado.
				opcionesMenu.add(menuTarea);
				//Guardamos la tarea que hay nueva.
				tAnt = rs.getSubtarea().getTarea();
				menuTarea = new MenuItem();
				menuTarea.setValue(tAnt.getNombre());				
				menuTarea.setIcon(rutaImagenes.concat(tAnt.getImagen()));	
				menuTarea.setStyleClass(claseBoton);
				menuSubtarea = new MenuItem();				
			}
			//Le damos el nombre a la tarea
			menuSubtarea.setValue(rs.getSubtarea().getNombre());
			menuSubtarea.setLink(rs.getSubtarea().getEnlace());
			menuSubtarea.setIcon(rutaImagenes.concat(rs.getSubtarea().getImagen()));
			//menuSubtarea.setId(rs.getSubtarea().getTarea().getNombre()+rs.getSubtarea().getNombre());
			menuSubtarea.setId(rs.getSubtarea().getEnlace());
			menuSubtarea.addActionListener(this);
			 MethodBinding mb = FacesContext.getCurrentInstance().getApplication().createMethodBinding("#{menuBean.ruta}",new Class[0]);
			menuSubtarea.setAction(mb);			
							
			//Agregamos la subtareaMenu a la tareaMenu
			menuTarea.getChildren().add(menuSubtarea);
		}
		//Para que agregue el ultimo menuTarea que configuramos.
		opcionesMenu.add(menuTarea);
	}
	
	public String ruta(){
		log.debug("entro en ruta ");
		return enlace;
	}

	public IGestionRol getGr() {
		return gr;
	}

	public void setGr(IGestionRol gr) {
		this.gr = gr;
	}

	public IGestionRolSubtarea getGrs() {
		return grs;
	}

	public void setGrs(IGestionRolSubtarea grs) {
		this.grs = grs;
	}

	public List<MenuItem> getOpcionesMenu() {
		return opcionesMenu;
	}

	public void setOpcionesMenu(List<MenuItem> opcionesMenu) {
		this.opcionesMenu = opcionesMenu;
	}

	@Override
	public void processAction(ActionEvent arg0) throws AbortProcessingException {		
		enlace = arg0.getComponent().getId();
		System.out.println("la opcion elegida es .... " + enlace);
		log.debug("la opcion elegida es .... " + enlace);	
		FacesContext facesContext = FacesContext.getCurrentInstance();
		
	}
	
}
